package com.xiehospital.system.service.impl;

import java.util.List;

import com.xiehospital.common.core.domain.entity.SysBtype;
import com.xiehospital.system.mapper.SysBedBtypeMapper;
import com.xiehospital.system.mapper.SysBtypeMapper;
import com.xiehospital.system.service.ISysBtypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xiehospital.common.constant.UserConstants;
import com.xiehospital.common.exception.ServiceException;
import com.xiehospital.common.utils.StringUtils;

/**
 * 床位类型信息 服务层处理
 *
 * @author Xierujian
 */
@Service
public class SysBtypeServiceImpl implements ISysBtypeService
{
    @Autowired
    private SysBtypeMapper btypeMapper;

    @Autowired
    private SysBedBtypeMapper bedBtypeMapper;

    /**
     * 查询床位类型信息集合
     *
     * @param btype 床位类型信息
     * @return 床位类型信息集合
     */
    @Override
    public List<SysBtype> selectBtypeList(SysBtype btype)
    {
        return btypeMapper.selectBtypeList(btype);
    }

    /**
     * 查询所有床位类型
     *
     * @return 床位类型列表
     */
    @Override
    public List<SysBtype> selectBtypeAll()
    {
        return btypeMapper.selectBtypeAll();
    }

    /**
     * 通过床位类型ID查询床位类型信息
     *
     * @param btypeId 床位类型ID
     * @return 角色对象信息
     */
    @Override
    public SysBtype selectBtypeById(Long btypeId)
    {
        return btypeMapper.selectBtypeById(btypeId);
    }

    /**
     * 根据用户ID获取床位类型选择框列表
     *
     * @param userId 用户ID
     * @return 选中床位类型ID列表
     */
    @Override
    public List<Long> selectBtypeListByUserId(Long userId)
    {
        return btypeMapper.selectBtypeListByUserId(userId);
    }

    /**
     * 校验床位类型名称是否唯一
     *
     * @param btype 床位类型信息
     * @return 结果
     */
    @Override
    public boolean checkBtypeNameUnique(SysBtype btype)
    {
        Long btypeId = StringUtils.isNull(btype.getBtypeId()) ? -1L : btype.getBtypeId();
        SysBtype info = btypeMapper.checkBtypeNameUnique(btype.getBtypeName());
        if (StringUtils.isNotNull(info) && info.getBtypeId().longValue() != btypeId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 校验床位类型编码是否唯一
     *
     * @param btype 床位类型信息
     * @return 结果
     */
    @Override
    public boolean checkBtypeCodeUnique(SysBtype btype)
    {
        Long btypeId = StringUtils.isNull(btype.getBtypeId()) ? -1L : btype.getBtypeId();
        SysBtype info = btypeMapper.checkBtypeCodeUnique(btype.getBtypeCode());
        if (StringUtils.isNotNull(info) && info.getBtypeId().longValue() != btypeId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    /**
     * 通过床位类型ID查询床位类型使用数量
     *
     * @param btypeId 床位类型ID
     * @return 结果
     */
    @Override
    public int countBedBtypeByBtypeId(Long btypeId)
    {
        return bedBtypeMapper.countBedBtypeByBtypeId(btypeId);
    }

    /**
     * 删除床位类型信息
     *
     * @param btypeId 床位类型ID
     * @return 结果
     */
    @Override
    public int deleteBtypeById(Long btypeId)
    {
        return btypeMapper.deleteBtypeById(btypeId);
    }

    /**
     * 批量删除床位类型信息
     *
     * @param btypeIds 需要删除的床位类型ID
     * @return 结果
     */
    @Override
    public int deleteBtypeByIds(Long[] btypeIds)
    {
        for (Long btypeId : btypeIds)
        {
            SysBtype btype = selectBtypeById(btypeId);
            if (countBedBtypeByBtypeId(btypeId) > 0)
            {
                throw new ServiceException(String.format("%1$s已分配,不能删除", btype.getBtypeName()));
            }
        }
        return btypeMapper.deleteBtypeByIds(btypeIds);
    }

    /**
     * 新增保存床位类型信息
     *
     * @param btype 床位类型信息
     * @return 结果
     */
    @Override
    public int insertBtype(SysBtype btype)
    {
        return btypeMapper.insertBtype(btype);
    }

    /**
     * 修改保存床位类型信息
     *
     * @param btype 床位类型信息
     * @return 结果
     */
    @Override
    public int updateBtype(SysBtype btype)
    {
        return btypeMapper.updateBtype(btype);
    }
}
